<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Classe dirapHttpUrl</title>
</head>
<body>
	<a href="index.html">Sommaire</a>
	<h2>Prérequis</h2>
	<p>Une application PHP qui fonctionne sous Apache. Cette classe n'a jamais 
	été testée sous IIS ou un autre serveur Web et ne fonctionnera probablement pas.</p>
<h2>Cas d'utilisations</h2>
<p>Cette classe est utile dans le cas où on souhaite générer des entêtes 
<b>Location:</b> qui soient compatibles avec la 
<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">RFC 2616</a>
(Section 14.30), c'est à dire une URI absolue et non un chemin relatif, même s'il
semble que la plupart des navigateurs supportent ce format non standard. 
</p>
<h3>Cas simple</h3>
<p>Le serveur hébergeant l'application est directement accessible de l'internet.
	<br><img src="requete-simple.png" alt="">
</p>
<p>dans ce cas, il suffit d'appeler :<br />
<pre>
	dirapHttpUrl::redirectTo('page2.php');
</pre><br />Cela fonctionnera sous réserve de valorisation du tableau 
superglobal $_SERVER[] ce qui est en général le cas. La méthode fonctionne aussi
bien avec un apache 1.3.x que 2.0.x et 2.2.x. <br />La technique utilisée est simple,
elle repose uniquement sur les valeurs fournies par Apache
</p>
<h3>Cas complexe</h3>
<p>
	Utilisation d'une application via un répartiteur de charge avec boitier de 
	chiffrement SSL :
	<br><img src="requete.png" alt="">
</p>
<p>Dans ce cas, il faudra valoriser deux constantes, une pour indiquer à 
l'application son URL absolue de base visible de l'extérieur (<i>https://serveur/appli/</i>) l'autre pour
indiquer un chemin local au serveur interne qui ne doit pas être renvoyé au client (<i>chemin</i>).
on s'attend à une redirection vers <i><span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/</span><span style="color:#060">dossier/</span><span style="color:#0b0">page2.php</span></i>.
<pre>
	dirapHttpUrl::redirectTo('<span style="color:#0b0">page2.php</span>');
</pre>
renverra <i><span style="color:#f1f">http://serveur-interne:port/</span><span style="color:#808">chemin/</span><span style="color:#060">dossier/</span><span style="color:#0b0">page2.php</span></i>, ce n'est pas
du tout ce que nous souhaitons.
<pre>
	define('HTTP_URL_BASE','<span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/</span>');
	dirapHttpUrl::redirectTo('<span style="color:#0b0">page2.php</span>');
</pre>
renverra <i><span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/</span><span style="color:#808">chemin/</span><span style="color:#060">dossier/</span><span style="color:#0b0">page2.php</span></i>, ce qui est presque ce 
que nous voulons. 	
<pre>
	define('HTTP_URL_BASE','<span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/</span>');
	define('HTTP_URL_LOCAL_PREFIX','<span style="color:#808">chemin</span>');
	dirapHttpUrl::redirectTo('<span style="color:#0b0">page2.php</span>');
</pre>
nous renverra l'URL attendue, c'est à dire <i><span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/</span><span style="color:#060">dossier/</span><span style="color:#0b0">page2.php</span></i>. 
</p>
<p>Maintenant, on souhaite une redirections vers la page <i><span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/<span style="color:#0b0">index.php</span></i>.
<pre>
	define('HTTP_URL_BASE','<span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/</span>');
	define('HTTP_URL_LOCAL_PREFIX','<span style="color:#808">chemin</span>');
	dirapHttpUrl::redirectTo('<span style="color:#0b0">../index.php</span>');
</pre>
La méthode s'occupera de nettoyer les '../', ce qui peut éventuellement aboutir à une exception si l'URL finalement calculée n'est pas valide. comme par exemple :
<pre>
	define('HTTP_URL_BASE','<span style="color:#f11">https://serveur/</span><span style="color:#11c">appli/</span>');
	define('HTTP_URL_LOCAL_PREFIX','<span style="color:#808">chemin</span>');
	dirapHttpUrl::redirectTo('<span style="color:#0b0">../../index.php</span>');
</pre>
</p>
</body>
</html>